package com.global.vo;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.global.base.StringUtil;

/**
 * 运行时，参数信息
 * 
 * @author zhanglinye
 */
public class QueryParameter {

	private String name;
	private Object value;

	private boolean queryALL = false;
	private boolean queryEmpty = false;
	private boolean queryNotEmpty = false;

	
	private boolean isExistError = false;

	private List<String> errorMessageList = new ArrayList<String>();

	/**
	 * 查询空记录，Yes表示查询参数对应的栏位为空的所有记录
	 */
	public enum EmptyRecordEnum {
		Yes, No
	};

	/**
	 * 查询非空记录，Yes表示查询参数对应的栏位不为空的所有记录
	 */
	public enum NotEmptyRecordEnum {
		Yes, No
	};
	
	/**
	 * 过滤数据时的运算符，例如: > , < In
	 */
//	public enum QueryOperatorEnum {
//		In, '<'
//	};
	

	/**
	 * 
	 * @param name
	 *            参数名称
	 * @param value
	 *            参数值
	 * @param javaDataType
	 *            参数类型，参考{@linkplain JavaDataType}
	 * @param parameterIndex
	 *            参数在SQL查询语句中的顺序（从1开始）
	 */
	public QueryParameter(String name, Object value) {
		this.name = name;
		this.value = value;

		if (StringUtils.isBlank(name)) {
			isExistError = true;

			errorMessageList.add("参数的名称不允许为空");
		}
	}
	
	// /**
	// * 如果isQueryALL为true，则SQL片段形如：username = username
	// * 如果isQueryALL为false，则SQL片段中包含 ?
	// * @param queryParameterDef {@linkplain QueryParameterDefinition}
	// * @param value 参数值
	// * @param isQueryALL 是否查询所有，如果为true，则表示当前参数不作为查询条件
	// */
	// public QueryParameter(QueryParameterDefinition queryParameterDef, Object
	// value, boolean isQueryALL) {
	// if(queryParameterDef==null){
	// isExistError = true;
	// this.errorMessageList.add("");
	// }else{
	// this.queryParameterDef = queryParameterDef;
	// this.value = value;
	//
	// }
	//
	// this.queryALL = isQueryALL;
	// this.queryEmpty = false;
	// this.queryNotEmpty = false;
	// }
	//
	// /**
	// * 如果参数queryEmpty为Yes，则SQL片段形如：username is Null
	// * 如果参数queryEmpty为No，则SQL片段中包含 ?
	// * @param queryParameterDef {@linkplain QueryParameterDefinition}
	// * @param value 参数值
	// * @param queryEmpty {@linkplain EmptyRecordEnum}
	// */
	// public QueryParameter(QueryParameterDefinition queryParameterDef, Object
	// value, final EmptyRecordEnum queryEmpty) {
	// this.queryParameterDef = queryParameterDef;
	// this.queryALL = false;
	// this.queryNotEmpty = false;
	//
	// if(EmptyRecordEnum.Yes==queryEmpty){
	// this.value = "";
	// this.queryEmpty = true;
	// }else{
	// this.value = value;
	// this.queryEmpty = false;
	// }
	// }
	//
	// /**
	// * 如果参数queryNotEmpty为Yes，则SQL片段形如：username is Not Null
	// * 如果参数queryNotEmpty为No，则SQL片段中包含 ?
	// * @param queryParameterDef {@linkplain QueryParameterDefinition}
	// * @param value 参数值
	// * @param queryNotEmpty {@linkplain NotEmptyRecordEnum}
	// */
	// public QueryParameter(QueryParameterDefinition queryParameterDef, Object
	// value, final NotEmptyRecordEnum queryNotEmpty) {
	// this.queryALL = false;
	// this.queryEmpty = false;
	//
	// if(NotEmptyRecordEnum.Yes==queryNotEmpty){
	// this.value = "";
	// this.queryNotEmpty = true;
	// }else{
	// this.value = value;
	// this.queryNotEmpty = false;
	// }
	// }

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return 返回参数值（需要根据定义的参数配置信息进行转换后，方可以使用）
	 */
	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}

//	/**
//	 * 根据定义的参数配置信息转换后的字符串
//	 * 
//	 * @return 转换后的字符串
//	 */
//	public String getStringValue() {
//		if (parameterDefinition!=null && value!=null) {
//			String type = parameterDefinition.getJavaDataType();
//			if (type.equalsIgnoreCase(JavaDataType.STRING)) {
//				return String.valueOf(value);
//			} else if (type.equalsIgnoreCase(JavaDataType.DATE)) {
//				try {
//					return ((Date) value).toString();
//				} catch (Exception e) {
//					errorMessageList.add("值【" + String.valueOf(value) + "】不是【" + type + "】类型，则无法转换");
//				}
//			} else if (type.equalsIgnoreCase(JavaDataType.LONG)
//					|| type.equalsIgnoreCase(JavaDataType.DOUBLE)) {
//				if (NumberUtil.isCanToNumber(String.valueOf(value))) {
//					return String.valueOf(value);
//				} else {
//					errorMessageList.add("值【" + String.valueOf(value) + "】不是【" + type + "】类型，则无法转换");
//				}
//			} else if (type.equalsIgnoreCase(JavaDataType.TIMESTAMP)) {
//				String.valueOf(value);
//			}
//		}
//
//		return "";
//	}

	/**
	 * 是否查询所有记录
	 * 
	 * @return true 表示查询所有记录
	 */
	public boolean isQueryALL() {
		return queryALL;
	}

	/**
	 * 是否查询栏位为空的记录
	 * 
	 * @return true 表示查询栏位为空的记录，false 表示参数值为?对应的替换值
	 */
	public boolean isQueryEmpty() {
		return queryEmpty;
	}

	/**
	 * 是否查询栏位不为空的记录
	 * 
	 * @return true 表示查询栏位不为空的记录，false 表示参数值为?对应的替换值
	 */
	public boolean isQueryNotEmpty() {
		return queryNotEmpty;
	}

	/**
	 * 返回参数信息中存在错误
	 * 
	 * @return true 表示存在错误，参考{@link getErrorMessage}
	 */
	public boolean isExistError() {
		return isExistError;
	}

	/**
	 * 返回异常信息
	 * 
	 * @return
	 */
	public String getErrorMessage() {
		return StringUtil.getString(errorMessageList, ",");
	}
}
